<?php
// Имя стартового файла
if ( ! defined('ACTION')) define('ACTION', 'forum');

// Подключить функции xmarty
require_once('index.php');

/**
 * Список тем
 */
function action_forum_topics() {
    global $document, $content;

    // Разбивка на страницы
    $count = 20;
    $page = get_qs('page');
    if (not(is_numeric($page))) $page = 1;
    $start = ($page - 1) * $count;

    // Загрузить данные из базы
    $forum = $content->addChild('forum');
    sql_items($forum, '
        select *
        ,(select count(*) from forum where parent_id=f.id and deleted=0) as childs
        ,(select name from forum where parent_id=f.id and deleted=0 order by date desc limit 0,1) as last_name
        ,(select email from forum where parent_id=f.id and deleted=0 order by date desc limit 0,1) as last_email
        from forum f where parent_id is null and deleted=0
        order by date desc
        limit '.$start.', '.$count
    );

    // Сформировать список страниц
    $records = sql_value('select count(*) from forum where parent_id is null and deleted=0');
    pages($page, $count, $records, $forum);

    // Вывести страницу
    response('forum');
} // end func action_forum_topics

/**
 * Определенная тема со списком ответов
 *
 * @param int ID топика
 */
function action_forum_item($id) {
    global $document, $content;

    $topic = $content->addChild('topic');

    // Тема
    sql_one($topic, 'select * from forum where id=? and deleted=0', array($id));

    // Ответы
    sql_items($topic, 'select * from forum where parent_id=? and deleted=0 order by date', array($id));

    // Вывести страницу
    response('forum');
} // end func action_forum_item

/**
 * Записать сообщение в форум
 */
function action_forum_insert() {
    global $document;

    // Получить данные
    $parent_id = get_post('parent_id', true);
    $title = get_post('title');
    $name = get_post('name');
    $email = get_post('email');
    $text = get_post('text');

    // Записать сообщение в базу данных
    $id = sql('
        insert into forum (parent_id, last_date, date, title, name, email, text)
        values ( :parent_id, now(), now(), :title, :name, :email, :text )',
        array(':parent_id'=>$parent_id, ':title'=>$title, ':name'=>$name, ':email'=>$email, ':text'=>$text),
        true
    );

    // "Поднять" тему
    if ($parent_id) {
        sql('update forum set last_date=now() where id=?', array($parent_id));
    }

    // Перейти на страницу с сообщением
    header('Location: forum.php?id='.($parent_id ? $parent_id : $id));
} // end func action_forum_item

/**
 * Удалить сообщение форума
 */
function action_forum_delete() {
    global $document, $content, $i18n;

    // Получить данные
    $parent_id = get_post('parent_id');
    $id = get_post('id');
    $password = get_post('password');
    $pass_hash = sha1($password.'xmarty');

    // Проверить пароль
    // Пароль ADMIN_PASS может быть захеширован функцией sha1($password.'xmarty'), либо быть открытым (в этом случае его длина не должна быть равна 40 символам)
    if ($password != '' and ((strlen(ADMIN_PASS) != 40 and $password == ADMIN_PASS) or (strlen(ADMIN_PASS) == 40 and $pass_hash == ADMIN_PASS))) {
        // Удалить запись
        sql('delete from forum where id=?', array($id));

        // Перейти на прежнюю страницу
        header('Location: forum.php'.($parent_id ? '?id='.$parent_id : ''));
    } else {
        // Вывести сообщение об ошибке
        $message = $content->addChild('message', htmlspecialchars($i18n->error->password_error));
        response();
    }
} // end func action_forum_item

// Выполнить, если вызвали forum.php
if (ACTION == 'forum') {
    if (isset($_POST['submit_delete'])) {
        action_forum_insert();
    } elseif (isset($_POST['submit_insert'])) {
        action_forum_insert();
    } elseif (isset($_GET['id'])) {
        action_forum_item($_GET['id']);
    } else {
        action_forum_topics();
    }
}
// end forum.php
